package model.alumnos;

import java.util.ArrayList;
import java.util.List;

import model.Universidad;
import model.carrerasYPlanes.Carrera;
import model.interfaces.AlumnoIMPL;
import model.materiasYCatedras.Persona;
import model.oficinaDeAlumnos.OficinaDeAlumnos;

public class Alumno implements AlumnoIMPL{
	private Persona persona;
	private List<AlumnoEnCarrera> alumnoEnCarrera = new ArrayList<AlumnoEnCarrera>();
	private CursoDeIngreso cursoDeIngreso;
	
	//CONSTRUCTOR:
	
	public Alumno(Persona persona){
		super();
		this.setPersona(persona);
		Universidad.getInstance().agregarAlumno(this);
	}
	
	//-------------------------------------------------------------
	
	/**Este metodo chequea si el alumno aprobo el curso de ingreso
	 * @return
	 */
	public boolean aproboCursoDeIngreso(){
		return this.getCursoDeIngreso().aprobo();
	}

	
	public String toString(){
		return this.getNombre() + " " + this.getApellido();
	}
	
	/**
	 * Se fija en una carrera si el alumno esta inscripto (o sea si tiene un legajo)
	 * 
	 * @param unaCarrera 
	 * @return
	 */
	public boolean tieneLegajoEnCarrera(Carrera unaCarrera){
		return unaCarrera.getAlumnosInscriptos().contains(this);	
	}
	
	
	/**Setea el alumno en alumno en carrea
	 * @author Leandro
	 *
	 */	
	public void agregarEnCarrera(AlumnoEnCarrera aluCarr){
		this.alumnoEnCarrera.add(aluCarr);
	}
	
	/**Devuelve la instancia de alumno en carrera inscripto en la carrera
	 * pasada por parametro, en caso de no existir salta una exception
	 * @author Leandro
	 *
	 */	
	public AlumnoEnCarrera getAlumnoCarrera(Carrera carrera){
		for (AlumnoEnCarrera aluCarr : this.alumnoEnCarrera) {
			if(aluCarr.getCarrera() == carrera){
				return aluCarr;
			}
		}
		throw new RuntimeException("El alumno no existe en la carrera");
	}
		
	//Getters & Setters:

	public Persona getPersona() {
		return persona;
	}


	public CursoDeIngreso getCursoDeIngreso() {
		return cursoDeIngreso;
	}

	public void setCursoDeIngreso(CursoDeIngreso cursoDeIngreso) {
		this.cursoDeIngreso = cursoDeIngreso;
	}


	public List<AlumnoEnCarrera> getAlumnoEnCarrera() {
		return alumnoEnCarrera;
	}

	public void setAlumnoEnCarrera(List<AlumnoEnCarrera> alumnoEnCarrera) {
		this.alumnoEnCarrera = alumnoEnCarrera;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	
	public String getNombre(){
		return this.getPersona().getNombre();
	}
	
	public String getApellido(){
		return this.getPersona().getApellido();
	}
	
	public String getTelefono(){
		return this.getPersona().getTelefono();
	}
	
	public String getSexo(){
		return this.getPersona().getSexo();
	}
	
	public String getEstadoCivil(){
		return this.getPersona().getEstadoCivil();
	}
	
	public String getCelular(){
		return this.getPersona().getCelular();
	}
	
	public String getEMail(){
		return this.getPersona().geteMail();
	}
	
}
